/*
 * Contexto.h
 *
 *  Created on: 07/06/2010
 *      Author: administrador
 */

#ifndef CONTEXTO_H_
#define CONTEXTO_H_
#include <string>
#include <iostream>
#include <sstream>
#include <vector>
#include "Distribucion.h"

using namespace std;

class Contexto {

private:

	string clave;

	vector<Distribucion*> caracteres;

	unsigned long int totalFrecuencias;

public:

	static char const CARACTER_ESCAPE = '\e';

private:

	void inicializarContexto();

	/* Retorna la posicion del caracter en el vector caracteres */
	int getIndice(char caracter);

	/* Retorna la distribucion del caracter pasado por parametro en este contexto
	 * Si no encuentra el caracter en este contexto, retorna NULL */
	Distribucion* getDistribucion(char caracter);

	/* Agrega una distribucion al final del vector caracteres */
	void agregarDistribucion(Distribucion* distribucion);

	/* Ordena en forma ascendente el vector caracteres */
	void ordenarCaracteres();

public:

	Contexto(string clave);

	virtual ~Contexto();

	string getClave();

	vector<Distribucion*> getDistribuciones();

	unsigned long int getTotalFrecuencias();

	/* Retorna la frecuencia de caracter en el contexto */
	unsigned long int getFrecuencia(char caraceter);

	/* Retorna la suma de las frecuencias de los caracteres anteriores a caracter */
	unsigned long int getFrecuenciaAcumulada(char caraceter);

	/* Retorna la distribucion del caracter pasado por parametro.
	 * Si no se encuentra, retorna la distribucion del caracter ESCAPE */
	Distribucion* buscarDistribucion(char caracter);

};

#endif /* CONTEXTO_H_ */
